﻿using pdfer.FileObjects;
using pdfer.Syntax;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace pdfer.PdfObjecs
{
    internal class DocInfoDictionary: PdfFileObject
    {
        // /Title        文本字符串   该文件的标题。请注意，这与第一页上显示的任何标题无关
        // /Subject      文本字符串   该文件的主题。同样，这只是元数据，没有关于内容的特定规则
        // /Keywords     文本字符串   与此文档相关的关键字。没有给出关于如何构建这些的建议
        // /Author       文本字符串   文件作者的姓名
        // /CreationDate 日期字符串   文档创建的日期
        // /ModDate      日期字符串   上次修改文档的日期
        // /Creator      文本字符串   最初创建此文档的程序的名称，如果它以另一种格式（例如，“Microsoft Word”）启动
        // /Producer     文本字符串   将此文件转换为PDF的程序的名称，如果它以另一种格式（例如，字处理器的格式）启动
        public DocInfoDictionary(PdfFileObject pdfFileObject)
        : base(pdfFileObject)
            {

            }

        private String? _title;
        /// <summary>
        /// 文档标题
        /// </summary>
        public String? Title 
        {
            get 
            {
                if(_title == null && TryGetValue(PdfName.Key_Title, out object? val))
                {
                    _title = PdfParserUtils.ParseString(val);
                }
                return _title;
            }
        }

        private String? _subject;
        /// <summary>
        /// 文档主题
        /// </summary>
        public String? Subject 
        { 
            get 
            {
                if(_subject == null && TryGetValue(PdfName.Key_Subject, out var val))
                {
                    _subject = PdfParserUtils.ParseString(val);
                }   
                return _subject;
            }
        }
        private String? _keyword;
        /// <summary>
        /// 文档关键字
        /// </summary>
        public String? Keywords 
        {
            get
            {
                if (_keyword == null && TryGetValue(PdfName.Key_Keywords, out var val))
                {
                    _keyword = PdfParserUtils.ParseString(val);
                }
                return _keyword;
            }
        }
        private String? _author;
        /// <summary>
        /// 文档作者
        /// </summary>
        public String? Author 
        {
            get
            {
                if (_author == null && TryGetValue(PdfName.Key_Author, out var val))
                {
                    _author = PdfParserUtils.ParseString(val);
                }
                return _author;
            }
        }
        private DateTime? _createDate;
        /// <summary>
        /// 创建日期
        /// </summary>
        public DateTime? CreationDate
        {
            get
            {
                if (_createDate == null && TryGetValue(PdfName.Key_CreationDate, out var val))
                {
                    _createDate = PdfParserUtils.ParseDateTime(val);
                }
                return _createDate;
            }
        }
        private DateTime? _modDate;
        /// <summary>
        /// 修改文档日期
        /// </summary>
        public DateTime? ModDate
        {
            get
            {
                if (_modDate == null && TryGetValue(PdfName.Key_ModDate, out var val))
                {
                    _modDate = PdfParserUtils.ParseDateTime(val);
                }
                return _modDate;
            }
        }

        private String? _creator;
        /// <summary>
        /// 最初创建此文档的程序的名称
        /// </summary>
        public String? Creator
        {
            get
            {
                if (_creator == null && TryGetValue(PdfName.Key_Creator, out var val))
                {
                    _creator = PdfParserUtils.ParseString(val);
                }
                return _creator;
            }
        }
        private String? _producer;
        /// <summary>
        /// 将此文件转换为PDF的程序的名称
        /// </summary>
        public String? Producer
        {
            get
            {
                if (_producer == null && TryGetValue(PdfName.Key_Producer, out var val))
                {
                    _producer = PdfParserUtils.ParseString(val);
                }
                return _producer;
            }
        }
    }
}
